// Copyright (c)  YISH. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.

using System;
using NSQL.Sharpen;

namespace NSQL.Expressions.Functions
{
    /// <summary>
    /// variance() function returns the population standard variance of an expression.
    /// </summary>
    public class VarianceFunction : BaseExpression, IVarianceFunction
    {
        public IExpression Expr { get; set; }
        public AggregateType AggregateType { get; set; }

        public VarianceFunction(IExpression expression, AggregateType aggregateType = AggregateType.None)
        {
            Expr = expression;
            AggregateType = aggregateType;
        }
        
        public override T Accept<T>(IExpressionVisitor<T> visitor) => visitor.Visit(this);
        public override void Accept(IExpressionVisitor visitor) => visitor.Visit(this);
        public override bool IsValid => Expr.IsValid;
        protected override IExpression DeepCopy()
        {
            return new VarianceFunction(Expr.DeepClone())
            {
                Tag = Tag
            };
        }
    }
}